<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Generator函数分析</title>
</head>

<body>
  <script>
    // 分析1
    function* foo() {
      const res = yield 3 + 2
      return res
    }
    const g1 = foo()
    // 这个地方打印的value是5,因为yield后面的结果是5
    console.group('g1 console')
    console.log(g1.next())
    // 这里打印的value是undefined,我觉得可以这么理解,yield本身的返回值可以视为undefined,你要在next里面传,才能有返回值
    // 而return res 我认为应该这么理解,return后面的值就是g1.next()的值等同于yield,但是return没有记忆功能
    console.log(g1.next())
    console.groupEnd()

    // -----------------------华丽的分割线--------------------------

    // 分析2
    function* foo() {
      const res = yield 3 + 2
      return res
    }
    const g2 = foo()
    console.group('g2 console')
    // 这个地方控制台打印的还是5,这地方可以理解next()函数传参针对的是上一个yield,第一个next可以理解为运行代码到第一个yield处
    console.log(g2.next(2))
    console.groupEnd()
  </script>
</body>

</html>